package cn.dev33.satoken.exception;

import cn.dev33.satoken.context.SaHolder;
import lombok.Getter;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpStatus;

/**
 * Sa-Token框架内部逻辑发生错误抛出的异常
 * (自定义此异常方便开发者在做全局异常处理时分辨异常类型)
 *
 * @author kong
 */
@Slf4j
public class SaTokenException extends RuntimeException {

    /**
     * 序列化版本号
     */
    private static final long serialVersionUID = 6806129545290130132L;
    @Getter
    private final HttpStatus httpStatus = HttpStatus.OK;

    /**
     * 获取异常类型
     *
     * @return 异常类型
     */
    public String getType() {
        return httpStatus.value() + "";
    }

    private void printUrl() {
        log.error("error request url:{}", SaHolder.getRequest().getRequestPath());
    }

    /**
     * 获得账号类型
     *
     * @return 账号类型
     */
    public String getLoginType() {
        return null;
    }

    /**
     * 构建一个异常
     *
     * @param message 异常描述信息
     */
    public SaTokenException(String message) {
        super(message);
        printUrl();
    }

    /**
     * 构建一个异常
     *
     * @param cause 异常对象
     */
    public SaTokenException(Throwable cause) {
        super(cause);
        printUrl();
    }

    /**
     * 构建一个异常
     *
     * @param message 异常信息
     * @param cause   异常对象
     */
    public SaTokenException(String message, Throwable cause) {
        super(message, cause);
        printUrl();
    }

}
